package com.luofan.mapper;

import com.luofan.entity.dto.UserQueryDTO;
import com.luofan.entity.po.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.luofan.entity.vo.UserVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 
 * @since 2025-03-26
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {

    //登陆
    User login(User user);

    //查询账号是否已存在
    int checkAccountExist(@Param("account") String account);

    //创建用户
    int createUser(User user);

    //修改个人信息
    int updateUser(User user);

    //禁用，解禁用户
    int forbiddenUser(User user);

    //重置密码
    int resetPasswords(@Param("id") Long id);

    //判断原密码是否正确
    int verifyPassword(@Param("currentUserId") Long currentUserId,
                       @Param("oldPassword") String oldPassword);

    //更改用户所属教研室
    int updateUserSection(User user);

    //修改密码
    int updatePassword(@Param("currentUserId") Long currentUserId,
                       @Param("newPassword") String newPassword);

    //管理员 更改用户权限
    int updateUserRole(User user);

    //获取除了管理员外的所有用户id
    List<Long> listAllUserId();

    //获取所有主任id
    List<Long> listHeadId();

    //获取所有教师id
    List<Long> listTeacherId();

    //根据教研室id获取对应用户id
    List<Long> listIdBySectionId(@Param("sectionId") Long sectionId);

    //根据用户id获取用户名称
    String getUserNameById(@Param("userId") Long userId);

    //判断所操作的用户所在教研室是否已有主任
    Long getUserHead(@Param("id") Long id);

    //如果更改为教师，则将用户所在教研室主任id设置为null
    void clearSectionHeadId(@Param("id") Long id);

    //条件查询
    List<UserVO> listUserByCondition(UserQueryDTO userQueryDTO);

    //根据教研室id 查看该教研室是否已有主任
    Long getSectionHead(@Param("sectionId") Long sectionId);

    //设置教研室的主任id
    int setSectionHeadId(User user);
}
